/*******************************************************************************
  * 文件：NetComm_WiFiCfg.c
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2020.12.04
  * 说明：wifi配网
*******************************************************************************/
#include "NetComm_WiFiCfg.h"
#include "NetComm_Message.h"
#include "Hardware_IO.h"
#include "DevInfor.h"
#include "BuzCtrl.h"
#include "DisplayBoard.h"

static WiFiCfg_ts sWifiCfg;
static void NetComm_WifiCfgHook_1S(void);
/*******************************************************************************
  * 函数名：NetComm_GetWifiStatus
  * 功  能：获取wifi状态
  * 参  数：无
  * 返回值：WifiStatus_te
  * 说  明：无
*******************************************************************************/
WifiStatus_te  NetComm_GetWifiStatus(void)
{
    return sWifiCfg.eWIFIStatus;
}

/*******************************************************************************
  * 函数名：Dev_SetWifiStatus
  * 功  能：设置wifi状态
  * 参  数：WifiStatus_te
  * 返回值：无
  * 说  明：无
*******************************************************************************/
void NetComm_SetWifiStatus(WifiStatus_te estatus)
{
    // 状态发生改变
    if(sWifiCfg.eWIFIStatus != estatus)
    {
        // 重启配置定时器
        OS_TimerRestart(&sWifiCfg.sCfgTimer,500,NetComm_WifiCfgHook_1S);
    }

    // 更新wifi状态
    sWifiCfg.eWIFIStatus = estatus;
}

static void NetComm_WifiCfgHook_1S(void)
{
    switch(sWifiCfg.eWIFIStatus)
    {
    case eWIFI_CFG:
        // 500毫秒快闪 
        LED_WifiCtrl(eLED_TOGGLE);//WIFI指示灯翻转
        // 半小时时间到
        if(3600 == OS_TimerGetExpiredTimes(&sWifiCfg.sCfgTimer))
        {
            LED_WifiCtrl(eLED_OFF);// 关闭指示灯
            NetComm_SendEnterWorkModeMsg();// 发送进入工作模式指令
            OS_TimerStop(&sWifiCfg.sCfgTimer);// 停止配网定时器
        }
    break;
    case eWIFI_OK:
        LED_WifiCtrl(eLED_ON);//WIFI指示灯亮
        OS_TimerStop(&sWifiCfg.sCfgTimer);// 停止配网定时器
    break;
    case eWIFI_NOSERVER:
    case eWIFI_NOAP:
        if(0 == OS_TimerGetExpiredTimes(&sWifiCfg.sCfgTimer)%4)
        {    
            // 2S时间到，慢闪 
            LED_WifiCtrl(eLED_TOGGLE);//WIFI指示灯翻转        
        }
        // 半小时时间到
        if(3600 == OS_TimerGetExpiredTimes(&sWifiCfg.sCfgTimer))
        {
            LED_WifiCtrl(eLED_OFF);// 关闭指示灯
            NetComm_SendEnterWorkModeMsg();// 发送进入工作模式指令
            OS_TimerStop(&sWifiCfg.sCfgTimer);// 停止配网定时器
        }
    break;
    case eWIFI_ONPOWER:
        LED_WifiCtrl(eLED_OFF);//WIFI指示灯灭
        OS_TimerStop(&sWifiCfg.sCfgTimer);// 停止配网定时器
    break;
    }
}

static void NetComm_WifiCfgCheckHook_1S(void)
{
    // 检测右灶点动开关是否闭合
    if(0 == Hardware_RightStoveJogSwitchCheck())
    {
        // 右灶点动开关长按五秒
        if(5 == OS_TimerGetExpiredTimes(&sWifiCfg.sCfgCheckTimer))
        {
            // 启动配网
            NetComm_SetWifiStatus(eWIFI_CFG);//设置配置模式
            NetComm_SendEnterCfgModeMsg();//发送进入配网指令
            LED_WifiCtrl(eLED_ON);//WIFI指示灯亮
            BuzCtrl(eBUZ_VALID);//蜂鸣器提示音
        }
    }
    else
    {
        // 清空到期次数
        OS_TimerClearExpiredTimes(&sWifiCfg.sCfgCheckTimer);
    }
}

void NetComm_WiFICfgInit(void)
{
    // 开启配网检测定时器
    OS_TimerStart(&sWifiCfg.sCfgCheckTimer,u16SEC_TO_MSEC,NetComm_WifiCfgCheckHook_1S);
}

